package org.springframework.samples.petclinic.toplink;

import java.io.IOException;
import java.io.Writer;

import oracle.toplink.essentials.exceptions.ValidationException;
import oracle.toplink.essentials.platform.database.HSQLPlatform;
import oracle.toplink.essentials.queryframework.ValueReadQuery;

/**
 * Subclass of the TopLink Essentials default HSQLPlatform class, using native
 * HSQLDB identity columns for id generation.
 *
 * <p>Necessary for PetClinic's default data model, which relies on identity
 * columns: this is uniformly used across all persistence layer implementations
 * (JDBC, Hibernate, and JPA).
 *
 * @author Juergen Hoeller
 * @author <a href="mailto:james.x.clark@oracle.com">James Clark</a>
 * @since 1.2
 */
public class EssentialsHSQLPlatformWithNativeSequence extends HSQLPlatform {

	private static final long serialVersionUID = -55658009691346735L;


	public EssentialsHSQLPlatformWithNativeSequence() {
		// setUsesNativeSequencing(true);
	}

	public boolean supportsNativeSequenceNumbers() {
		return true;
	}

	public boolean shouldNativeSequenceAcquireValueAfterInsert() {
		return true;
	}

	public ValueReadQuery buildSelectQueryForNativeSequence() {
		return new ValueReadQuery("CALL IDENTITY()");
	}

	public void printFieldIdentityClause(Writer writer) throws ValidationException {
		try {
			writer.write(" IDENTITY");
		}
		catch (IOException ex) {
			throw ValidationException.fileError(ex);
		}
	}

}
